// 函数柯里化
// 柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术

function curry(fn) {
  // 获取原函数需要的参数个数
  const arity = fn.length;

  function curried(...args) {
    if (args.length >= arity) {
      // 如果传入的参数个数已经满足原函数的要求，则调用原函数
      return fn(...args);
    } else {
      // 否则返回一个新的函数，等待更多参数
      return (...newArgs) => curried(...args, ...newArgs);
    }
  }

  return curried;
}

function add(a, b, c) {
  console.log("aa", a + b + c);
  return a + b + c;
}
const addCurry = curry(add);
addCurry(1, 2)(4); // 3
